// 题目描述
// 48. 旋转图像
// 中等
// 1.7K
// 给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。
// 你必须在 原地 旋转图像，这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。
//   示例 1：
// 输入：matrix = [[1,2,3],[4,5,6],[7,8,9]]
// 输出：[[7,4,1],[8,5,2],[9,6,3]]
// 示例 2：
// 输入：matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]
// 输出：[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]
//   提示：
// n == matrix.length == matrix[i].length
// 1 <= n <= 20
// -1000 <= matrix[i][j] <= 1000
//   通过次数
// 482.1K
// 提交次数
// 643.3K
// 通过率
// 75.0%
// https://leetcode.cn/problems/rotate-image

/**
 * @param {number[][]} matrix
 * @return {void} Do not return anything, modify matrix in-place
 instead.
 */
const rotate = function (matrix) {
  const n = matrix.length

  // 1. 先沿对角线反转二维矩阵
  for (let i = 0; i < n; i++) {
    for (let j = i; j < n; j++) {
      const tmp = matrix[i][j]
      matrix[i][j] = matrix[j][i]
      matrix[j][i] = tmp
    }
  }

  // 2. 然后反转二维矩阵的每一行
  for (let i = 0; i < n; i++) {
    matrix[i] = matrix[i].reverse()
  }
}

const matrix = [[5, 1, 9, 11], [2, 4, 8, 10], [13, 3, 6, 7], [15, 14, 12, 16]]
rotate(matrix)
console.log(matrix)
